package com.quanyan.club.service;

import com.quanyan.club.entity.RespClubBaseInfo;
import com.quanyan.club.entity.db.TbClub;
import com.quanyan.club.entity.vo.req.ReqClub;
import com.quanyan.club.entity.vo.req.ReqClubPage;
import com.quanyan.club.entity.vo.req.ReqClubRecommend;
import com.quanyan.club.entity.vo.req.ReqClubSearch;
import com.quanyan.club.entity.vo.resp.*;
import com.quanyan.common.Plugin.PageObj;
import com.quanyan.common.enums.BaseEnum;
import com.quanyan.mq.client.response.MqResponse;

import java.util.List;

/**
 * Created by zhuo.shi on 2016/5/30.
 */
public interface ClubService {

    /**
     * 创建俱乐部
     * @param reqClub
     * @return
     */
    RespClubBaseInfo saveClub(Integer uid, ReqClub reqClub);

    /**
     * 俱乐部详情
     * @param clubId
     * @return
     */
    RespClubDetail queryClubDetail(Integer uid, Integer clubId);

    /**
     * 设置俱乐部信息
     * @param reqClub
     * @return
     */
    BaseEnum updateClub(Integer uid, ReqClub reqClub);

    /**
     * 获取俱乐部排名
     * @param clubId    俱乐部id
     * @param cityId    城市id = null，全国排名
     * @return
     */
    int getClubRanking(Integer clubId, Integer cityId);

    /**
     * 转化俱乐部基本信息
     */
    RespClubBaseInfo convert2RespClubBaseInfo(Integer uid, TbClub tbClub, boolean showAudit);

    /**
     * 我创建的俱乐部列表（分页）
     * @param uid               用户id
     * @param clubListPage      请求分页对象
     * @return
     */
    List<RespClubBaseInfo> listMyCreateClubs(Integer uid, ReqClubPage clubListPage);

    /**
     * 我创建的俱乐部个数
     * @param uid       用户id
     * @return
     */
    Integer countMyCreateClubs(Integer uid);

    /**
     * 我加入的俱乐部列表（分页）
     * @param uid               用户id
     * @param clubListPage      请求分页对象
     * @return
     */
    List<RespClubBaseInfo> listMyJoinedClubs(Integer uid, ReqClubPage clubListPage);

    /**
     * 我加入的俱乐部个数
     * @param uid        用户id
     * @return
     */
    Integer countMyJoinedClubs(Integer uid, ReqClubPage clubListPage);

    /**
     * 搜索到的俱乐部列表（分页）
     * @param  uid              当前搜索的用户id
     * @param reqClubSearch     请求搜索对象
     * @return
     */
    PageObj<List<RespClubBaseInfo>> searchClubs(Integer uid, ReqClubSearch reqClubSearch);

    /**
     * 推荐的俱乐部列表
     */
    List<RespClubBaseInfo> getRecommendClubs(Integer uid, ReqClubRecommend reqClubRecommend);

    /**
     * 获取俱乐部类型列表
     * @return
     */
    List<RespClubType> listClubType(String ver);

    RespCityPage listCity(Double lat, Double lng);

    /**
     * 获取俱乐部系统LOGO列表
     * @return
     */
    List<RespClubSystemLogo> listClubSystemLogo();

    /**
     * 获取俱乐部属性列表
     * @return
     */
    List<RespClubProperty> listClubProperty();


    /**
     * 获取省市区列表
     * @return
     */
    RespSituation getSituationList(long lastUpdateTime);

    /**
     * 获取俱乐部积分排名列表
     * @param cityId
     * @return
     */
    PageObj<List<RespClubBaseInfo>> getClubRankingList(Integer sportTypeId, Integer cityId, Integer pageNo, Integer pageSize);

    /**
     * 获取区列表
     * @param cityId
     * @return
     */
    RespClubCity getCityDistrictList(int cityId);

    /**
     * 获取俱乐部二维码
     * @param clubId
     * @return
     */
    RespClubQRCodeInfo getClubQRCode(int clubId);

    /**
     * 更新俱乐部积分
     */
    void updateClubIntegral();


    MqResponse test(String string);

    /**
     * 我创建的、我加入的、我管理的俱乐部列表
     */
    RespMyAllClubs listMyAllClubs(int uid);

    List<RespClubBaseInfo> getMyManageClubList(int uid);

    /**
     * 获取俱乐部锚点链接
     * @param hrefNo
     * @return
     */
    String getClubFAQLink(int hrefNo);

    boolean isFirstClub(int uid, int clubId);
}
